Platform Explorer / Nuxeo Platform 6.0

Extension point chains

Documentation

Operation Chain registration

Contribution Descriptors

  • Class: org.nuxeo.ecm.automation.core.OperationChainContribution

Existing Contributions

Contributions are presented in the same order as the registration order on this extension point. This order is displayed before the contribution name, in brackets.

  • nuxeo-platform-mail-core-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="CreateMailDocumentFromAutomation">
          <operation id="Context.RestoreDocumentInput">
            <param name="name" type="string">mailFolder</param>
          </operation>
          <operation id="Document.Create">
            <param name="type" type="string">MailMessage</param>
            <param name="name" type="string">expr:Context["mailDocumentName"]</param>
            <param name="properties" type="properties">expr:mail:messageId=@{messageId}
            </param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">mailDocument</param>
          </operation>
          <operation id="Context.RunOperationOnList">
            <param name="id" type="string">ProcessAttachment</param>
            <param name="list" type="string">attachments</param>
            <param name="isolate" type="boolean">true</param>
            <param name="item" type="string">attachment</param>
          </operation>
          <operation id="Context.RunScript">
            <param name="script" type="string">
               
               Context["mailDocument"].setPropertyValue("dc:title",Context["subject"]);
               Context["mailDocument"].setPropertyValue("mail:htmlText",Context["text"]);
               Context["mailDocument"].setPropertyValue("mail:recipients",Context["recipients"]);
               Context["mailDocument"].setPropertyValue("mail:cc_recipients",Context["ccRecipients"]);
               Context["mailDocument"].setPropertyValue("mail:sending_date",Context["sendingDate"]);
                  
            </param>
          </operation>
          <operation id="Context.RestoreDocumentInput">
            <param name="name" type="string">mailDocument</param>
          </operation>
          <operation id="Document.Save"/>
        </chain>
        <chain id="ProcessAttachment">
          <operation id="Context.RestoreBlobInput">
            <param name="name" type="string">attachment</param>
          </operation>
          <operation id="Blob.Attach">
            <param name="document" type="document">expr:Context["mailDocument"]</param>
            <param name="save" type="boolean">false</param>
            <param name="xpath" type="string">files:files</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-routing-core-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="setDone">
          <operation id="Document.Routing.Step.Done"/>
        </chain>
        <chain id="simpleValidate">
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="simpleRefuse">
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="simpleUndo">
          <operation id="Document.Routing.BackToReady"/>
        </chain>
        <chain id="setNextStep">
          <operation id="Update.NextStep.ConditionalFolder"/>
        </chain>
        <chain id="decideNextStepAndSimpleValidate">
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">expr:Context['nextStepPos']
            </param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="updateCommentsOnDoc">
          <operation id="Document.Routing.UpdateCommentsInfoOnDocument"/>
        </chain>
        <chain id="simpleChooseNextOption1AndDone">
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">1</param>
          </operation>
          <operation id="Document.Routing.Step.Done"/>
        </chain>
        <chain id="simpleChooseNextOption2AndDone">
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">2</param>
          </operation>
          <operation id="Document.Routing.Step.Done"/>
        </chain>
      </extension>
  • nuxeo-platform-comment-workflow-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="acceptComment">
          <operation id="Context.FetchDocument"/>
          <operation id="Comment.Moderate">
            <param name="accept" type="boolean">true</param>
          </operation>
        </chain>
    
        <chain id="rejectComment">
          <operation id="Context.FetchDocument"/>
          <operation id="Comment.Moderate">
            <param name="accept" type="boolean">false</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-web-mobile-cap-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="sendEmailToMe">
          <operation id="Context.FetchDocument"/>
          <operation id="Notification.SendMail">
            <param name="from" type="string">noreply@nuxeo.com</param>
            <param name="message" type="string">
              &lt;html&gt;
                &lt;head&gt;
                &lt;/head&gt;
                &lt;body&gt;
                  You asked to send an email to your own email account.
                  You will find files attached to this email.
                  &lt;br/&gt;
                  Original document is &lt;a href="${docUrl}"&gt;${Document['dc:title']}&lt;/a&gt;. 
                  &lt;br/&gt;
                  Sent from Nuxeo.
                &lt;/body&gt;
              &lt;/html&gt;
            </param>
            <param name="subject" type="string">[Nuxeo] MailMe Service - new Binary sent</param>
            <param name="to" type="stringlist">expr:Fn.getEmail(Context.principal.name)</param>
            <param name="HTML" type="boolean">true</param>
            <param name="files" type="stringlist">file:content</param>
            <param name="viewId" type="string">view_documents</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-platform-webapp-base-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="downloadFilesZip">
          <operation id="Context.FetchDocument"/>
          <operation id="Blob.GetAll"/>
          <operation id="Blob.CreateZip">
            <param name="filename" type="string">attachments.zip
            </param>
          </operation>
          <operation id="Seam.DownloadFile"/>
        </chain>
    
      </extension>
  • nuxeo-platform-webapp-core-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="addCurrentDocumentToWorklist">
          <operation id="Context.FetchDocument"/>
          <operation id="Seam.AddToWorklist"/>
          <operation id="Seam.AddMessage">
            <param name="severity" type="string">INFO</param>
            <param name="message" type="string">label.document.added.to.worklist</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-routing-dm-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="simpleTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              setTaskDone
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
              <property key="nt:directive">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="followLifeCycleTransitionTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              followLifeCycleTransition
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="publishTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              publishDocument
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="conditionalTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              evaluateCondition
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="setTaskDone">
          <operation id="Document.Routing.SetRunningStepFromTask">
            <param name="mappingComments" type="boolean">true</param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="undoRunningTask">
          <operation id="Workflow.RemoveRoutingTask"/>
          <operation id="Document.Routing.BackToReady"/>
        </chain>
    
        <chain id="followLifeCycleTransition">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.SetLifeCycle">
            <param name="value" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("tkst:directive")
            </param>
          </operation>
    
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="publishDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.Publish">
            <param name="target" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("tkst:directive")
            </param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="evaluateCondition">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.Routing.EvaluateCondition">
            <param name="subject" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:subject")
            </param>
            <param name="operator" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:operator")
            </param>
            <param name="value" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:value")
            </param>
          </operation>
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">expr:Context['nextStepPos']
            </param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="sendTaskCreatedNotificationMail">
          <operation id="Notification.SendMail">
            <param name="from" type="string">Administrator@nuxeo.com</param>
            <param name="message" type="string">template:routingTaskAssigned
            </param>
            <param name="subject" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("dc:title")
            </param>
            <param name="to" type="stringlist">expr:Fn.getEmails(Context["document.routing.task.actors"])
            </param>
            <param name="HTML" type="boolean">false</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-platform-rendition-core-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="blobToPDF">
          <operation id="Blob.Pop"/>
          <operation id="Blob.ToPDF"/>
        </chain>
      </extension>
  • nuxeo-automation-jsf-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="ImportWorklist">
          <operation id="Seam.InitContext"/>
          <operation id="UserWorkspace.CreateDocumentFromBlob"/>
          <operation id="Document.Save"/>
          <operation id="Seam.AddToWorklist"/>
          <operation id="Seam.DestroyContext"/>
        </chain>
        <chain id="ImportClipboard">
          <operation id="Seam.InitContext"/>
          <operation id="UserWorkspace.CreateDocumentFromBlob"/>
          <operation id="Document.Save"/>
          <operation id="Seam.AddToClipboard"/>
          <operation id="Seam.DestroyContext"/>
        </chain>
        <chain id="SeamActions.GET">
          <operation id="Seam.RunOperation">
            <param name="id" type="string">Actions.GET</param>
          </operation>
        </chain>
    
        <chain id="FileManager.ImportWithMetaDataInSeam">
          <operation id="FileManager.Import">
            <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Document.Update">
            <param name="properties" type="properties">expr:Context.get("docMetaData")
            </param>
          </operation>
          <operation id="Seam.RunOperation">
            <param name="id" type="string">Seam.Refresh</param>
          </operation>
        </chain>
    
        <chain id="FileManager.ImportInSeam">
          <operation id="FileManager.Import">
            <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Seam.RunOperation">
            <param name="id" type="string">Seam.Refresh</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-automation-features-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="VersionAndAttachFile">
          <operation id="Blob.PushList">
          </operation>
          <operation id="Document.Fetch">
            <param name="value" type="string">expr:Context.get("currentDocument")</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin before file update</param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">newDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">currentDocument</param>
            <param name="value" type="string">expr:Context.get("newDocument").id</param>
          </operation>
          <operation id="Blob.PopList">
          </operation>
          <operation id="BlobHolder.Attach">
            <param name="useMainBlob" type="boolean">true</param>
          </operation>
        </chain>
        <chain id="AttachFiles">
          <operation id="BlobHolder.Attach">
            <param name="useMainBlob" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="VersionAndAttachFiles">
          <operation id="Blob.PushList">
          </operation>
          <operation id="Document.Fetch">
            <param name="value" type="string">expr:Context.get("currentDocument")</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin before files update</param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">newDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">currentDocument</param>
            <param name="value" type="string">expr:Context.get("newDocument").id</param>
          </operation>
          <operation id="Blob.PopList">
          </operation>
          <operation id="BlobHolder.Attach">
            <param name="useMainBlob" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="FileManager.ImportWithMetaData">
          <operation id="FileManager.Import">
             <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Document.Update">
            <param name="properties" type="properties">expr:Context.get("docMetaData")</param>
          </operation>
        </chain>
      </extension>
  • easyshare-1.0.4-593.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="addToAShareDocument">
          <operation id="Seam.GetCurrentDocument"/>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">shareDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">shareDocumentPath</param>
            <param name="value" type="object">expr:Document.path</param>
          </operation>
          <operation id="Seam.FetchFromWorklist"/>
          <operation id="CreateProxyLive">
            <param name="Destination Path" type="string">expr:shareDocumentPath</param>
          </operation>
          <operation id="Context.RestoreDocumentInput">
            <param name="name" type="string">shareDocument</param>
          </operation>
          <operation id="Audit.Log">
            <param name="event" type="string">Documents added to the share</param>
            <param name="category" type="string">EasyShareFolderCategory</param>
            <param name="comment" type="string">expr:Some documents were added to the share folder @{Document["dc:title"]}</param>
          </operation>
          <operation id="Seam.Refresh"/>
          <operation id="Seam.AddInfoMessage">
            <param name="message" type="string">Added</param>
          </operation>
        </chain>
        <chain id="navToParent">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.GetParent"/>
          <operation id="Seam.NavigateTo"/>
        </chain>
      </extension>
  • nuxeo-routing-default-6.0.jar
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="NRD-AC-PR-ChooseParticipants-Output">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunOperation">
            <param name="id" type="string">NRD-AC-PR-LockDocument</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">initiatorComment</param>
            <param name="value" type="object">expr:NodeVariables["comment"]</param>
          </operation>
        </chain>
        <chain id="NRD-AC-PR-LockDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Auth.LoginAs">
            <param name="name" type="string">expr:workflowInitiator</param>
          </operation>
          <operation id="Document.Lock"/>
        </chain>
        <chain id="NRD-AC-PR-UnlockDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Unlock"/>
        </chain>
        <chain id="NRD-AC-PR-ValidateNode-Output">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunOperation">
            <param name="id" type="string">NRD-AC-PR-UnlockDocument</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.RunOperation">
            <param name="id" type="string">logInAudit</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="NRD-AC-PR-force-validate">
          <operation id="Context.FetchDocument"/>
          <operation id="Auth.LoginAs">
            <param name="name" type="string">expr:Context["workflowInitiator"]</param>
          </operation>
          <operation id="Audit.Log">
            <param name="event" type="string">Consultation time excedeed</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">Some consultation tasks were aborted by the system as they received no feedback message.</param>
          </operation>
          <operation id="Workflow.ResumeNodeOperation"/>
        </chain>
        <chain id="NRD-AC-PR-storeTaskInfo">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunScript">
            <param name="script" type="string">This[0]</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">tasksInfo</param>
            <param name="value" type="object">expr:NodeVariables["tasks"]</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberNA</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("NA")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberRejected</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("reject")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberApproved</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("approve")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberOfTasks</param>
            <param name="value" type="object">expr:NodeVariables["numberOfTasks"]</param>
          </operation>
          <operation id="Render.Document">
            <param name="template" type="string">template:NRD-PR-TasksInfo</param>
            <param name="filename" type="string">output.ftl</param>
            <param name="mimetype" type="string">text/xml</param>
            <param name="type" type="string">ftl</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">review_result_file</param>
            <param name="value" type="object">expr:This.get(0)</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">review_result</param>
            <param name="value" type="object">expr:This.get(0).getString()</param>
          </operation>
        </chain>
        <chain id="cancelWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.SetVar">
            <param name="name" type="string">isParallelWF</param>
            <param name="value" type="object">expr:Event.context.getProperty("wfName").equals("wf.parallelDocumentReview.ParallelDocumentReview")?true:false</param>
          </operation>
          <operation id="Context.RunOperation">
            <param name="id" type="string">expr:isParallelWF?"Document.Unlock":"voidChain"</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="initInitiatorComment">
          <operation id="Context.RunScript">
            <param name="script" type="string">if((NodeVariables["comment"] != "") AND (NodeVariables["comment"] != null)){
    WorkflowVariables["initiatorComment"]= NodeVariables["comment"];}</param>
          </operation>
        </chain>
        <chain id="logInAudit">
          <operation id="Audit.Log">
            <param name="event" type="string">expr:NodeVariables["button"] =="reject"?"Document refused":"Document validated"</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">expr:@{nodeLastActor} @{NodeVariables["button"] =="reject"?"Document refused":"validated"} the document with the following comment: @{NodeVariables["comment"]}</param>
          </operation>
        </chain>
        <chain id="nextAssignee">
          <operation id="Context.RunScript">
            <param name="script" type="string">if (NodeVariables["button"] == "validate") {
      WorkflowVariables["index"] = WorkflowVariables["index"] + 1;
    }
    else if (NodeVariables["button"] == "reject") {
      WorkflowVariables["index"] = WorkflowVariables["index"] - 1;
    }
    else if (NodeVariables["button"] == "submit") {
      WorkflowVariables["index"] = 0;
    }</param>
          </operation>
        </chain>
        <chain id="notifyInitiatorEndOfWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="Notification.SendMail">
            <param name="from" type="string">expr:Env["mail.from"]</param>
            <param name="message" type="string">The document was approved by every participant.</param>
            <param name="subject" type="string">expr:@{Env["nuxeo.notification.eMailSubjectPrefix"]} Document approved</param>
            <param name="to" type="stringlist">expr:Fn.getEmail(workflowInitiator)</param>
            <param name="HTML" type="boolean">false</param>
            <param name="rollbackOnError" type="boolean">true</param>
            <param name="viewId" type="string">view_documents</param>
          </operation>
        </chain>
        <chain id="reinitAssigneeComment">
          <operation id="Context.RunScript">
            <param name="script" type="string">if((NodeVariables["comment"] != "") AND (NodeVariables["comment"] != null)){
    NodeVariables["comment"]= null;}</param>
          </operation>
        </chain>
        <chain id="terminateWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.RunOperation">
            <param name="id" type="string">logInAudit</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="id" type="string">notifyInitiatorEndOfWorkflow</param>
            <param name="isolate" type="boolean">false</param>
            <param name="rollbackGlobalOnError" type="boolean">false</param>
          </operation>
          <operation id="Context.RunOperation">
            <param name="id" type="string">expr:WorkflowVariables["validationOrReview"] == "validation"?"validateDocument":"voidChain"</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Audit.Log">
            <param name="event" type="string">Review completed successfully</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">All the participants of the review have approved the document.</param>
          </operation>
        </chain>
        <chain id="validateDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.SetLifeCycle">
            <param name="value" type="string">approve</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin after validation</param>
          </operation>
        </chain>
        <chain id="voidChain">
          <operation id="Context.FetchDocument"/>
        </chain>
      </extension>